"""
YamlOutputParser 是 LangChain 库中用于解析 YAML 格式输出的解析器，通常与 Pydantic 模型结合使用以实现结构化数据解析。以下是它的详细说明：
主要功能
YAML 解析：将模型输出的 YAML 格式字符串解析为 Python 对象
结构化数据验证：结合 Pydantic 模型对输出进行数据类型验证和约束检查
数据模型映射：将 YAML 数据映射到预定义的数据模型结构
"""
from langchain.output_parsers import YamlOutputParser
from langchain_core.prompts import PromptTemplate
from pydantic import Field, BaseModel

from models import get_ds_model_client

class Joke(BaseModel):
    setup: str = Field(description="question to set up a joke")
    punchline: str = Field(description="answer to resolve the joke")

user_query = "tell me a joke."
prompt = PromptTemplate.from_template("Answer the user query.\n{format_instructions}\n{query}\n")
client = get_ds_model_client()
parser = YamlOutputParser(pydantic_object=Joke)

chain = prompt | client | parser
print(chain.invoke({"query": user_query, "format_instructions": parser.get_format_instructions()}))
